﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Twodi.Interfaces;
using Microsoft.Xna.Framework;

namespace Twodi.Aspect.Implemented
{
    /// <summary>
    /// Define um componente com opacidade.
    /// </summary>
    public class OpacityAspect : AbstractAspect, IOpacity
    {
        /// <summary>
        /// Opacidade do componente.
        /// </summary>
        private float opacity;

        /// <summary>
        /// Construtor padrão.
        /// </summary>
        /// <param name="opacity">Opacidade do componente.</param>
        public OpacityAspect(float opacity = 1)
        {
            this.Opacity = opacity;
        }

        /// <summary>
        /// Opacidade do componente. É limitada entre 0(0%) e 1(100%).
        /// </summary>
        public float Opacity
        {
            get
            {
                return this.opacity;
            }
            set
            {
                OnPropertyChanged<float>("Opacity", ref opacity, MathHelper.Clamp(value, 0, 1));
            }
        }

        /// <summary>
        /// Invocar evento que informa que opacidade do componente foi alterada.
        /// </summary>
        /// <param name="e"></param>
        protected void onOpacityChanged(EventArgs e)
        {
            if (OpacityChanged != null) {
                OpacityChanged(this, e);
            }
        }

        /// <summary>
        /// Evento invocado quando opacidade do componente é alterada.
        /// </summary>
        public event EventHandler<EventArgs> OpacityChanged;
    }
}
